Un comando es lo que se ejecuta al pulsar un botón de la barra de herramientas o al escribir una combinación de teclas. Puede ser una acción muy sencilla, como cambiar el nivel de zoom de la vista 3D o rotar el punto de vista, o un sistema complejo que abre cuadros de diálogo y espera a que el usuario realice tareas específicas.
Cada comando de FreeCAD tiene un nombre único que aparece en la página :Categoría:Referencia de comandos. Los comandos se pueden ejecutar mediante un botón de la barra de herramientas, un elemento de menú o desde un script python o la Consola de Python, ejecutando:
FreeCADGui.runCommand("my_Command_Name")
Los comandos de FreeCAD se definen por cada entorno de trabajo. Normalmente, los entornos de trabajo añaden sus definiciones de comandos al inicializar FreeCAD, por lo que el comando existe y está disponible en cuanto se inicia FreeCAD, independientemente de si el entorno de trabajo correspondiente se ha activado o no. Sin embargo, en algunos casos, el autor del entorno de trabajo puede haber decidido no sobrecargar el proceso de inicio de FreeCAD y, por lo tanto, cargar las definiciones de comandos solo al inicializar el entorno de trabajo. En esos casos, el comando solo estará disponible después de que el entorno de trabajo se haya activado (al menos una vez que se haya seleccionado mediante el selector de entornos de trabajo).
Como la mayoría de ellos requieren interacción del usuario, los comandos de FreeCAD solo están disponibles en modo GUI y no en modo consola. Sin embargo, para mayor comodidad, la mayoría de los comandos de FreeCAD tendrán una función Python correspondiente (como Part.makeBox o Draft.makeLine), o ejecutarán código que es muy fácil de replicar en un script de Python y/o macro.
Los comandos se pueden definir tanto en C++ como en Python.
Ejemplo de definición de comando C++, generalmente definida siguiendo la estructura NombreMódulo/Gui/Comando.cpp.
DEF_STD_CMD_A(StdCmdMyCommand);
StdCmdMyCommand::StdCmdMyCommand()
: Command("Std_My_Command")
{
sGroup = QT_TR_NOOP("File");
sMenuText = QT_TR_NOOP("My Command");
sToolTipText = QT_TR_NOOP("Runs my command in the active document");
sWhatsThis = "Std_MyCommand";
sStatusTip = QT_TR_NOOP("Runs my command in the active document");
sPixmap = "MyCommand.svg";
sAccel = "Ctrl+A";
}
void StdCmdExport::activated(int iMsg)
{
// place here the code to be executed when the command is ran
}
bool StdCmdMyCommand::isActive(void)
{
// here you have a chance to return true or false depending if your command must be shown as active or inactive (greyed).
}
// the command must be "registered" in FreeCAD's command system
CommandManager &rcCmdMgr = Application::Instance->commandManager();
rcCmdMgr.addCommand(new StdCmdMyCommand());
Ejemplo de definición de comando Python, se puede colocar en un directorio como Mod/ModuleName/tools/commands.py.
from PySide.QtCore import QT_TRANSLATE_NOOP
class MyCommand:
"""Explanation of the command."""
def __init__(self):
"""Initialize variables for the command that must exist at all times."""
pass
def GetResources(self):
"""Return a dictionary with data that will be used by the button or menu item."""
return {'Pixmap': 'MyCommand.svg',
'Accel': "Ctrl+A",
'MenuText': QT_TRANSLATE_NOOP("My_Command", "My Command"),
'ToolTip': QT_TRANSLATE_NOOP("My_Command", "Runs my command in the active document")}
def Activated(self):
"""Run the following code when the command is activated (button press)."""
print("Activated")
def IsActive(self):
"""Return True when the command should be active or False when it should be disabled (greyed)."""
return True
# The command must be "registered" with a unique name by calling its class.
FreeCADGui.addCommand('My_Command', MyCommand())
Ver Función de dibujo de líneas.